//============================================================================================
/**
 * @file	legend_demo.c
 * @brief	伝説デモ（ホウオウ・ルギア・アルセウス）画面 呼び出し
 * @author	Hiroyuki Nakamura
 * @date	09.01.21
 */
//============================================================================================
#include "common.h"

#include "ld_main.h"
#include "ld_lugia.h"
#include "ld_houou.h"
#include "ld_arceus.h"


//============================================================================================
//	定数定義
//============================================================================================


//============================================================================================
//	プロトタイプ宣言
//============================================================================================


//============================================================================================
//	グローバル変数
//============================================================================================

// メイン処理
static const pLegendDemoFunc MainFunc[] = {
	LDHOUOU_Main,		// ホウオウ
	LDLUGIA_Main,		// ルギア
	LDARCEUS_Main,		// アルセウス
};




//--------------------------------------------------------------------------------------------
/**
 * プロセス関数：初期化
 *
 * @param	proc	プロセスデータ
 * @param	seq		シーケンス
 *
 * @return	処理状況
 */
//--------------------------------------------------------------------------------------------
PROC_RESULT LEGENDDEMO_ProcInit( PROC * proc, int * seq )
{
	LEGEND_DEMO_WORK * wk;

	OS_Printf( "↓↓↓↓↓　伝説デモ処理開始　↓↓↓↓↓\n" );

	sys_CreateHeap( HEAPID_BASE_APP, HEAPID_LEGEND_DEMO, 0x80000 );

	wk = PROC_AllocWork( proc, sizeof(LEGEND_DEMO_WORK), HEAPID_LEGEND_DEMO );
	MI_CpuClear8( wk, sizeof(LEGEND_DEMO_WORK) );

	wk->dat = PROC_GetParentWork( proc );

	return PROC_RES_FINISH;
}

//--------------------------------------------------------------------------------------------
/**
 * プロセス関数：メイン
 *
 * @param	proc	プロセスデータ
 * @param	seq		シーケンス
 *
 * @return	処理状況
 */
//--------------------------------------------------------------------------------------------
PROC_RESULT LEGENDDEMO_ProcMain( PROC * proc, int * seq )
{
	LEGEND_DEMO_WORK * wk = PROC_GetWork( proc );

	if( MainFunc[wk->dat->mode]( wk ) == 0 ){
		return PROC_RES_FINISH;
	}

	return PROC_RES_CONTINUE;
}

//--------------------------------------------------------------------------------------------
/**
 * プロセス関数：終了
 *
 * @param	proc	プロセスデータ
 * @param	seq		シーケンス
 *
 * @return	処理状況
 */
//--------------------------------------------------------------------------------------------
PROC_RESULT LEGENDDEMO_ProcEnd( PROC * proc, int * seq )
{
	PROC_FreeWork( proc );

	sys_DeleteHeap( HEAPID_LEGEND_DEMO );

	OS_Printf( "↑↑↑↑↑　伝説デモ処理終了　↑↑↑↑↑\n" );

	return PROC_RES_FINISH;
}